home *** CD-ROM | disk | FTP | other *** search
/ Apple WWDC 1996 / WWDC96_1996 (CD).toast / Technology Materials / MacOS 8 Resources / Developer Tools / Mac OS 8 Interfaces & Libraries / Interfaces / AIncludes / FileManagerSPI.a < prev    next >
Text File  |  1996-05-01  |  51KB  |  1,317 lines

  1. ;
  2. ;    File:        FileManagerSPI.a
  3. ;
  4. ;    Contains:    FileManager extended interface
  5. ;
  6. ;    Version:    Technology:    System 8
  7. ;                Release:    Universal Interfaces 3.0d3 on Copland DR1
  8. ;
  9. ;    Copyright:    © 1984-1996 by Apple Computer, Inc.  All rights reserved.
  10. ;
  11. ;    Bugs?:        If you find a problem with this file, send the file and version
  12. ;                information (from above) and the problem description to:
  13. ;
  14. ;                    Internet:    apple.bugs@applelink.apple.com
  15. ;                    AppleLink:    APPLE.BUGS
  16. ;
  17. ;
  18.     IF &TYPE('__FILEMANAGERSPI__') = 'UNDEFINED' THEN
  19. __FILEMANAGERSPI__ SET 1
  20.  
  21.     IF &TYPE('__KERNEL__') = 'UNDEFINED' THEN
  22.     include 'Kernel.a'
  23.     ENDIF
  24.     IF &TYPE('__FILEMANAGERTYPES__') = 'UNDEFINED' THEN
  25.     include 'FileManagerTypes.a'
  26.     ENDIF
  27.     IF &TYPE('__FILES__') = 'UNDEFINED' THEN
  28.     include 'Files.a'
  29.     ENDIF
  30. ;  You can use FileManager.h or FileManagerSPI.h, but not both 
  31.     IF &TYPE('__FILEMANAGER__') = 'UNDEFINED' THEN
  32.     IF FOR_SYSTEM8_PREEMPTIVE THEN
  33. ; >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> C O N T A I N E R S <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
  34. ;
  35. ;****************************************************************************
  36. ;    OBJECTS
  37. ;****************************************************************************
  38. ;
  39. ;
  40. ;    Function:    FSObjectRefClone
  41. ;    Purpose:    Return a copy of an FSObjectRef such that the copy also needs to be disposed.
  42. ;    Inputs:
  43. ;                object_t        The object ref to be cloned.
  44. ;    Outputs:
  45. ;                clone_o            Copy of object_t.
  46. ;    Notes:
  47. ;                The value returned is the same value passed as input in object_t.  This call
  48. ;                would typically be used to balance a future call to FSObjectRefDispose.  Some
  49. ;                examples where it might be used:
  50. ;                    * A called procedure needs to save an FSObjectRef for future use, but the
  51. ;                      calling conventions dictate that the caller is responsible for disposing
  52. ;                      of the ref.  The called function could call FSObjectRefClone to make its
  53. ;                      copy.  The caller can safely dispose of the ref, yet the callee can use
  54. ;                      the ref until doing its own dispose.
  55. ;                    * In object-oriented programming, an object could be passed an FSObjectRef
  56. ;                      in its constructor.  The destructor would be expected to dispose the ref,
  57. ;                      but so would the routine that created the object.  FSObjectRefClone could
  58. ;                      be used in the constructor.
  59. ;                
  60. ;                The returned FSObjectRef is registered to the calling process (as must object_t).
  61. ;
  62. ;
  63. ; extern OSStatus FSObjectRefClone(FSObjectRef object_t, FSObjectRef *clone_o)
  64. ;
  65.     IF GENERATINGCFM THEN
  66.         IMPORT_CFM_FUNCTION FSObjectRefClone
  67.     ENDIF
  68.  
  69. ;
  70. ; extern OSStatus FSObjectRefCloneAsync(FSObjectRef object_t, const KernelNotification *completion_i, FSObjectRef *clone_o, MessageID *requestID_o)
  71. ;
  72.     IF GENERATINGCFM THEN
  73.         IMPORT_CFM_FUNCTION FSObjectRefCloneAsync
  74.     ENDIF
  75.  
  76. ;
  77. ;    Function:    FSObjectRefDispose
  78. ;    Purpose:    Dispose of an FSObjectRef previously returned to a process.
  79. ;    Inputs:
  80. ;                object_t        The object ref to be disposed.
  81. ;    Outputs:
  82. ;    Notes:
  83. ;                A process must dispose of all FSObjectRefs returned to it.  The FSObjectRefs
  84. ;                may be returned as explicit output parameters, or as properties.  If a ref
  85. ;                is returned several times for a given object, it must be disposed for each
  86. ;                time it was returned.
  87. ;                
  88. ;                When all refs to a given object are disposed, the File Manager will dispose
  89. ;                of any resources it allocated in order to operate on that object.  All refs
  90. ;                for a process will be automatically disposed upon process termination.
  91. ;                
  92. ;                For refs returned as properties (especially when iterating over muliple
  93. ;                objects), the FSObjectRefDisposeBulk call may be more convenient.
  94. ;
  95. ;
  96. ; extern OSStatus FSObjectRefDispose(FSObjectRef object_t)
  97. ;
  98.     IF GENERATINGCFM THEN
  99.         IMPORT_CFM_FUNCTION FSObjectRefDispose
  100.     ENDIF
  101.  
  102. ;
  103. ; extern OSStatus FSObjectRefDisposeAsync(FSObjectRef object_t, const KernelNotification *completion_i, MessageID *requestID_o)
  104. ;
  105.     IF GENERATINGCFM THEN
  106.         IMPORT_CFM_FUNCTION FSObjectRefDisposeAsync
  107.     ENDIF
  108.  
  109. ;
  110. ;    Function:    FSObjectRefDisposeBulk
  111. ;    Purpose:    Dispose of many FSObjectRefs, using a list of property descriptors.
  112. ;                (Typically used to dispose all refs returned by FSObjectIterate).
  113. ;    Inputs:
  114. ;                objectCount_i        Number of objects returned by FSObjectIterate.
  115. ;                propertyCount_i        Number of properties per object, as passed to FSObjectIterate.
  116. ;                statusBuffer_i        Status buffer as returned by FSObjectIterate.
  117. ;                properties_i        List of property descriptors passed to FSObjectIterate.
  118. ;                propertiesBuffer_i    Buffer where property values were returned by FSObjectIterate.
  119. ;    Outputs:
  120. ;                statusBuffer_o        Error status for each property of each object.
  121. ;    Notes:
  122. ;                This call is intended to make it easy to dispose of FSObjectRefs returned by an
  123. ;                FSObjectIterate call.  You would pass the same property count, property descriptor
  124. ;                list and property value buffer as was passed to FSObjectIterate.  You also pass the
  125. ;                object count and status buffer as returned by FSObjectIterate (since these tell which
  126. ;                properties were actually returned).
  127. ;                
  128. ;                Any property in properties_i that does not contain an FSObjectRef is ignored.  Any
  129. ;                property that does not have E_NoError in its propertyStatus field (in statusBuffer_i)
  130. ;                is ignored.
  131. ;                
  132. ;                All elements of statusBuffer_o will be set.  If the property was ignored (as described
  133. ;                above), then its propertyStatus is set to E_NoError; otherwise, it is set based on the
  134. ;                attempt to dispose of the ref.  The propertyValueActualSize fields are all set to 0.
  135. ;
  136. ;
  137. ;
  138. ; extern OSStatus FSObjectRefDisposeBulk(ItemCount objectCount_i, ItemCount propertyCount_i, const FSBufferDescriptor *statusBuffer_i, const FSPropertyDescriptor properties_i[2147483647], const FSBufferDescriptor *propertiesBuffer_i, FSBufferDescriptor *statusBuffer_o)
  139. ;
  140.     IF GENERATINGCFM THEN
  141.         IMPORT_CFM_FUNCTION FSObjectRefDisposeBulk
  142.     ENDIF
  143.  
  144. ;
  145. ; extern OSStatus FSObjectRefDisposeBulkAsync(ItemCount objectCount_i, ItemCount propertyCount_i, const FSBufferDescriptor *statusBuffer_i, const FSPropertyDescriptor properties_i[2147483647], const FSBufferDescriptor *propertiesBuffer_i, const KernelNotification *completion_i, FSBufferDescriptor *statusBuffer_o, MessageID *requestID_o)
  146. ;
  147.     IF GENERATINGCFM THEN
  148.         IMPORT_CFM_FUNCTION FSObjectRefDisposeBulkAsync
  149.     ENDIF
  150.  
  151. ;
  152. ;    Function:    FSObjectRefRegister
  153. ;    Purpose:    Allow an FSObjectRef to be used by another process.
  154. ;    Inputs:
  155. ;                senderObject_t        The object ref.
  156. ;                receiverPid_i        The other process that will be using senderObject_t.
  157. ;    Outputs:
  158. ;    Notes:
  159. ;                This call allows one process to send an FSObjectRef to another process
  160. ;                such that the other process can use the FSObjectRef itself.  The process
  161. ;                specified by receiverPid_i must also dispose of senderObject_t.  The File
  162. ;                Manager acts as if senderObject_t has been returned to receiverPid_i.
  163. ;
  164. ;
  165. ;
  166. ;
  167. ;
  168. ;                You might use this call if you have several processes where one process
  169. ;                (typically a server of some kind) obtains FSObjectRefs for use by other
  170. ;                processes (typically clients of that server).  If the other process (as
  171. ;                specified by receiverPid_i) won't actually call the File Manager with
  172. ;                that FSObjectRef, then it doesn't need to be registered to that process.
  173. ;
  174. ;                It would also be possible to have the server process make all of the
  175. ;                calls to the File Manager.  FSObjectRefs could still be passed between
  176. ;                client and server, but if the clients never use the refs directly, then
  177. ;                there would be no need to register the refs to those clients.  (But beware:
  178. ;                the server would still be responsible for disposing of all refs returned to
  179. ;                it; the server would probably have some cleanup and disposal to do if one
  180. ;                of its client processes were to terminate.)
  181. ;
  182. ;
  183. ; extern OSStatus FSObjectRefRegister(FSObjectRef senderObject_t, KernelProcessID receiverPid_i)
  184. ;
  185.     IF GENERATINGCFM THEN
  186.         IMPORT_CFM_FUNCTION FSObjectRefRegister
  187.     ENDIF
  188.  
  189. ;
  190. ; extern OSStatus FSObjectRefRegisterAsync(FSObjectRef senderObject_t, KernelProcessID receiverPid_i, const KernelNotification *completion_i, MessageID *requestID_o)
  191. ;
  192.     IF GENERATINGCFM THEN
  193.         IMPORT_CFM_FUNCTION FSObjectRefRegisterAsync
  194.     ENDIF
  195.  
  196. ;
  197. ;============================================================================
  198. ;    Volume Sets
  199. ;============================================================================
  200. ;
  201. ;
  202. ;    Function:    FSVolumeSetGetInformation
  203. ;    Purpose:    Returns an FSObjectRef for a Volume Set specified by an
  204. ;                FSVolumeSetObjID.
  205. ;    Inputs:
  206. ;                volumeSet_t                The volume set.
  207. ;    Outputs:
  208. ;                object_o                Object ref for the volume set.
  209. ;                includesBootVolume_o    True if the volume set includes the boot volume.
  210. ;    Notes:
  211. ;                There is currently only one volume set.  In the future there could be others
  212. ;                (perhaps file servers; perhaps to support multiple local users).
  213. ;
  214. ;
  215. ; extern OSStatus FSVolumeSetGetInformation(FSVolumeSetObjID volumeSet_t, Boolean *includesBootVolume_o, FSObjectRef *object_o)
  216. ;
  217.     IF GENERATINGCFM THEN
  218.         IMPORT_CFM_FUNCTION FSVolumeSetGetInformation
  219.     ENDIF
  220.  
  221. ;
  222. ; extern OSStatus FSVolumeSetGetInformationAsync(FSVolumeSetObjID volumeSet_t, const KernelNotification *completion_i, Boolean *includesBootVolume_o, FSObjectRef *object_o, MessageID *requestID_o)
  223. ;
  224.     IF GENERATINGCFM THEN
  225.         IMPORT_CFM_FUNCTION FSVolumeSetGetInformationAsync
  226.     ENDIF
  227.  
  228. ;
  229. ;============================================================================
  230. ;    Volumes
  231. ;============================================================================
  232. ;
  233. ;
  234. ; extern OSStatus FSVolumeGetInformation(FSVolumeObjID volume_t, FSObjectRef *object_o)
  235. ;
  236.     IF GENERATINGCFM THEN
  237.         IMPORT_CFM_FUNCTION FSVolumeGetInformation
  238.     ENDIF
  239.  
  240. ;
  241. ; extern OSStatus FSVolumeGetInformationAsync(FSVolumeObjID volume_t, const KernelNotification *completion_i, FSObjectRef *objectRef_o, MessageID *requestID_o)
  242. ;
  243.     IF GENERATINGCFM THEN
  244.         IMPORT_CFM_FUNCTION FSVolumeGetInformationAsync
  245.     ENDIF
  246.  
  247. ;  
  248. ;
  249. ; extern OSStatus FSVolumeMount(ObjectID device_t, FSVolumeCapabilities requiredCapabilities_i, const FSMountAccessConstraints *constraints_i, FSObjectRef *volume_o)
  250. ;
  251.     IF GENERATINGCFM THEN
  252.         IMPORT_CFM_FUNCTION FSVolumeMount
  253.     ENDIF
  254.  
  255. ;
  256. ; extern OSStatus FSVolumeMountAsync(ObjectID device_t, FSVolumeCapabilities requiredCapabilities_i, const FSMountAccessConstraints *constraints_i, const KernelNotification *completion_i, FSObjectRef *volume_o, MessageID *requestID_o)
  257. ;
  258.     IF GENERATINGCFM THEN
  259.         IMPORT_CFM_FUNCTION FSVolumeMountAsync
  260.     ENDIF
  261.  
  262. ;  
  263. ;
  264. ; extern OSStatus FSVolumeUnmount(FSObjectRef volume_t)
  265. ;
  266.     IF GENERATINGCFM THEN
  267.         IMPORT_CFM_FUNCTION FSVolumeUnmount
  268.     ENDIF
  269.  
  270. ;
  271. ; extern OSStatus FSVolumeUnmountAsync(FSObjectRef volume_t, const KernelNotification *completion_i, MessageID *requestID_o)
  272. ;
  273.     IF GENERATINGCFM THEN
  274.         IMPORT_CFM_FUNCTION FSVolumeUnmountAsync
  275.     ENDIF
  276.  
  277. ;
  278. ;============================================================================
  279. ;    Folders
  280. ;============================================================================
  281. ;
  282. ;  
  283. ;
  284. ; extern OSStatus FSFolderCreateWithProperties(FSObjectRef container_t, ItemCount propertyCount_i, const FSPropertyDescriptor properties_i[2147483647], const FSBufferDescriptor *propertiesBuffer_i, FSBufferDescriptor *statusBuffer_o, FSObjectRef *folder_o)
  285. ;
  286.     IF GENERATINGCFM THEN
  287.         IMPORT_CFM_FUNCTION FSFolderCreateWithProperties
  288.     ENDIF
  289.  
  290. ;
  291. ; extern OSStatus FSFolderCreateWithPropertiesAsync(FSObjectRef container_t, ItemCount propertyCount_i, const FSPropertyDescriptor properties_i[2147483647], const FSBufferDescriptor *propertiesBuffer_i, const KernelNotification *completion_i, FSBufferDescriptor *statusBuffer_o, FSObjectRef *folder_o, MessageID *requestID_o)
  292. ;
  293.     IF GENERATINGCFM THEN
  294.         IMPORT_CFM_FUNCTION FSFolderCreateWithPropertiesAsync
  295.     ENDIF
  296.  
  297. ;
  298. ;============================================================================
  299. ;    Files
  300. ;============================================================================
  301. ;
  302. ;  
  303. ;
  304. ; extern OSStatus FSFileCreateWithProperties(FSObjectRef container_t, ItemCount propertyCount_i, const FSPropertyDescriptor properties_i[2147483647], const FSBufferDescriptor *propertiesBuffer_i, FSBufferDescriptor *statusBuffer_o, FSObjectRef *file_o)
  305. ;
  306.     IF GENERATINGCFM THEN
  307.         IMPORT_CFM_FUNCTION FSFileCreateWithProperties
  308.     ENDIF
  309.  
  310. ;
  311. ; extern OSStatus FSFileCreateWithPropertiesAsync(FSObjectRef container_t, ItemCount propertyCount_i, const FSPropertyDescriptor properties_i[2147483647], const FSBufferDescriptor *propertiesBuffer_i, const KernelNotification *completion_i, FSBufferDescriptor *statusBuffer_o, FSObjectRef *file_o, MessageID *requestID_o)
  312. ;
  313.     IF GENERATINGCFM THEN
  314.         IMPORT_CFM_FUNCTION FSFileCreateWithPropertiesAsync
  315.     ENDIF
  316.  
  317. ;
  318. ;============================================================================
  319. ;    Folder and File Requests
  320. ;============================================================================
  321. ;
  322. ;
  323. ; extern OSStatus FSObjectCopy(FSObjectRef sourceObject_t, FSObjectRef container_i, ItemCount propertyCount_i, const FSPropertyDescriptor properties_i[2147483647], const FSBufferDescriptor *propertiesBuffer_i, FSBufferDescriptor *statusBuffer_o, FSObjectRef *newObject_o)
  324. ;
  325.     IF GENERATINGCFM THEN
  326.         IMPORT_CFM_FUNCTION FSObjectCopy
  327.     ENDIF
  328.  
  329. ;
  330. ; extern OSStatus FSObjectCopyAsync(FSObjectRef sourceObject_t, FSObjectRef container_i, ItemCount propertyCount_i, const FSPropertyDescriptor properties_i[2147483647], const FSBufferDescriptor *propertiesBuffer_i, const KernelNotification *completion_i, FSBufferDescriptor *statusBuffer_o, FSObjectRef *newObject_o, MessageID *requestID_o)
  331. ;
  332.     IF GENERATINGCFM THEN
  333.         IMPORT_CFM_FUNCTION FSObjectCopyAsync
  334.     ENDIF
  335.  
  336. ;
  337. ;    Function:    FSObjectDelete
  338. ;    Purpose:    Deletes an object.  The FSObjectRef is NOT disposed; you must still dispose it yourself.
  339. ;                Further attempts to use the ref will return errors (such as E_ObjectNotFound).
  340. ;
  341. ;    Inputs:
  342. ;                object_t        The object to be deleted.
  343. ;    Outputs:
  344. ;
  345. ;
  346. ; extern OSStatus FSObjectDelete(FSObjectRef object_t)
  347. ;
  348.     IF GENERATINGCFM THEN
  349.         IMPORT_CFM_FUNCTION FSObjectDelete
  350.     ENDIF
  351.  
  352. ;
  353. ; extern OSStatus FSObjectDeleteAsync(FSObjectRef object_t, const KernelNotification *completion_i, MessageID *requestID_o)
  354. ;
  355.     IF GENERATINGCFM THEN
  356.         IMPORT_CFM_FUNCTION FSObjectDeleteAsync
  357.     ENDIF
  358.  
  359. ;
  360. ; extern OSStatus FSObjectMove(FSObjectRef sourceObject_t, FSObjectRef container_i, ItemCount propertyCount_i, const FSPropertyDescriptor properties_i[2147483647], const FSBufferDescriptor *propertiesBuffer_i, FSBufferDescriptor *statusBuffer_o)
  361. ;
  362.     IF GENERATINGCFM THEN
  363.         IMPORT_CFM_FUNCTION FSObjectMove
  364.     ENDIF
  365.  
  366. ;
  367. ; extern OSStatus FSObjectMoveAsync(FSObjectRef sourceObject_t, FSObjectRef container_i, ItemCount propertyCount_i, const FSPropertyDescriptor properties_i[2147483647], const FSBufferDescriptor *propertyValues_i, const KernelNotification *completion_i, FSBufferDescriptor *statusBuffer_o, MessageID *requestID_o)
  368. ;
  369.     IF GENERATINGCFM THEN
  370.         IMPORT_CFM_FUNCTION FSObjectMoveAsync
  371.     ENDIF
  372.  
  373. ;
  374. ;****************************************************************************
  375. ;    PROPERTIES
  376. ;****************************************************************************
  377. ;
  378. ;
  379. ;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  380. ;    Object Properties
  381. ;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  382. ;
  383. ;
  384. ; extern OSStatus FSObjectCreateProperties(FSObjectRef object_t, ItemCount propertyCount_i, const FSPropertyDescriptor properties_i[2147483647], const FSBufferDescriptor *propertiesBuffer_i, FSBufferDescriptor *statusBuffer_o)
  385. ;
  386.     IF GENERATINGCFM THEN
  387.         IMPORT_CFM_FUNCTION FSObjectCreateProperties
  388.     ENDIF
  389.  
  390. ;
  391. ; extern OSStatus FSObjectCreatePropertiesAsync(FSObjectRef object_t, ItemCount propertyCount_i, const FSPropertyDescriptor properties_i[2147483647], const FSBufferDescriptor *propertiesBuffer_i, const KernelNotification *completion_i, FSBufferDescriptor *statusBuffer_o, MessageID *requestID_o)
  392. ;
  393.     IF GENERATINGCFM THEN
  394.         IMPORT_CFM_FUNCTION FSObjectCreatePropertiesAsync
  395.     ENDIF
  396.  
  397. ;
  398. ; extern OSStatus FSObjectDeleteProperties(FSObjectRef object_t, ItemCount propertyCount_i, const FSProperty properties_i[2147483647], FSBufferDescriptor *statusBuffer_o)
  399. ;
  400.     IF GENERATINGCFM THEN
  401.         IMPORT_CFM_FUNCTION FSObjectDeleteProperties
  402.     ENDIF
  403.  
  404. ;
  405. ; extern OSStatus FSObjectDeletePropertiesAsync(FSObjectRef object_t, ItemCount propertyCount_i, const FSProperty properties_i[2147483647], const KernelNotification *completion_i, FSBufferDescriptor *statusBuffer_o, MessageID *requestID_o)
  406. ;
  407.     IF GENERATINGCFM THEN
  408.         IMPORT_CFM_FUNCTION FSObjectDeletePropertiesAsync
  409.     ENDIF
  410.  
  411. ; >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> C a p a b i l i t i e s <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
  412. ;
  413. ;****************************************************************************
  414. ;    PROPERTY ACCESS METHODS
  415. ;****************************************************************************
  416. ;
  417. ;
  418. ;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  419. ;    Object Property Simple Values
  420. ;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  421. ;
  422. ;
  423. ; extern OSStatus FSObjectGetProperties(FSObjectRef object_t, ItemCount propertyCount_i, const FSPropertyDescriptor properties_i[2147483647], FSBufferDescriptor *propertiesBuffer_o, FSBufferDescriptor *statusBuffer_o)
  424. ;
  425.     IF GENERATINGCFM THEN
  426.         IMPORT_CFM_FUNCTION FSObjectGetProperties
  427.     ENDIF
  428.  
  429. ;
  430. ; extern OSStatus FSObjectGetPropertiesAsync(FSObjectRef object_t, ItemCount propertyCount_i, const FSPropertyDescriptor properties_i[2147483647], const KernelNotification *completion_i, FSBufferDescriptor *propertiesBuffer_o, FSBufferDescriptor *statusBuffer_o, MessageID *requestID_o)
  431. ;
  432.     IF GENERATINGCFM THEN
  433.         IMPORT_CFM_FUNCTION FSObjectGetPropertiesAsync
  434.     ENDIF
  435.  
  436. ;
  437. ; extern OSStatus FSObjectSetProperties(FSObjectRef object_t, ItemCount propertyCount_i, const FSPropertyDescriptor properties_i[2147483647], const FSBufferDescriptor *propertiesBuffer_i, FSBufferDescriptor *statusBuffer_o)
  438. ;
  439.     IF GENERATINGCFM THEN
  440.         IMPORT_CFM_FUNCTION FSObjectSetProperties
  441.     ENDIF
  442.  
  443. ;
  444. ; extern OSStatus FSObjectSetPropertiesAsync(FSObjectRef object_t, ItemCount propertyCount_i, const FSPropertyDescriptor properties_i[2147483647], const FSBufferDescriptor *propertiesBuffer_i, const KernelNotification *completion_i, FSBufferDescriptor *statusBuffer_o, MessageID *requestID_o)
  445. ;
  446.     IF GENERATINGCFM THEN
  447.         IMPORT_CFM_FUNCTION FSObjectSetPropertiesAsync
  448.     ENDIF
  449.  
  450. ;
  451. ;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  452. ;    Object Property Fork Values
  453. ;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  454. ;
  455. ;
  456. ;============================================================================
  457. ;    Stream-based Access Method
  458. ;============================================================================
  459. ;
  460. ;  
  461. ;
  462. ; extern OSStatus FSStreamAllocate(FSStreamObjID stream_t, const FSForkPositionDescriptor *start_i, FSSize length_i, FSForkAllocationPolicy policy_i, FSSize *actualAllocation_o)
  463. ;
  464.     IF GENERATINGCFM THEN
  465.         IMPORT_CFM_FUNCTION FSStreamAllocate
  466.     ENDIF
  467.  
  468. ;
  469. ; extern OSStatus FSStreamAllocateAsync(FSStreamObjID stream_t, const FSForkPositionDescriptor *start_i, FSSize length_i, FSForkAllocationPolicy policy_i, const KernelNotification *completion_i, FSSize *actualAllocation_o, MessageID *requestID_o)
  470. ;
  471.     IF GENERATINGCFM THEN
  472.         IMPORT_CFM_FUNCTION FSStreamAllocateAsync
  473.     ENDIF
  474.  
  475. ;
  476. ;    Function:    FSStreamClose
  477. ;    Purpose:    Close a stream previously opened with FSStreamOpen or FSStreamOpenWithConstraints.
  478. ;    Inputs:
  479. ;                stream_t            The stream to close.
  480. ;    Outputs:
  481. ;    Notes:
  482. ;                Any data written to the stream is flushed (written by the File Manager) before the
  483. ;                stream is closed.  The FSStreamObjID, stream_t, may no longer be used.  Any resources
  484. ;                allocated by the File Manager for use by this stream will be disposed.
  485. ;
  486. ;
  487. ; extern OSStatus FSStreamClose(FSStreamObjID stream_t)
  488. ;
  489.     IF GENERATINGCFM THEN
  490.         IMPORT_CFM_FUNCTION FSStreamClose
  491.     ENDIF
  492.  
  493. ;
  494. ; extern OSStatus FSStreamCloseAsync(FSStreamObjID stream_t, const KernelNotification *completion_i, MessageID *requestID_o)
  495. ;
  496.     IF GENERATINGCFM THEN
  497.         IMPORT_CFM_FUNCTION FSStreamCloseAsync
  498.     ENDIF
  499.  
  500. ;
  501. ;    Function:    FSStreamFlush
  502. ;    Purpose:    Any data written to the stream will be written by the File Manager.
  503. ;    Inputs:
  504. ;                stream_t            The stream to flush.
  505. ;    Outputs:
  506. ;    Notes:
  507. ;                Stream data may still reside in the File Manager's caches, but any changes will have
  508. ;                been written out by the File Manager.  Note that the underlying device's driver, or
  509. ;                the device itself, may cache some data, so the File Manager cannot guarantee that
  510. ;                all data has actually been written to the underlying media.
  511. ;                
  512. ;                Other information about the object (such as its modification date) might not be flushed
  513. ;                by this call, though any volume-level data needed to access the stream will be.
  514. ;
  515. ;
  516. ;
  517. ;
  518. ; extern OSStatus FSStreamFlush(FSStreamObjID stream_t)
  519. ;
  520.     IF GENERATINGCFM THEN
  521.         IMPORT_CFM_FUNCTION FSStreamFlush
  522.     ENDIF
  523.  
  524. ;
  525. ; extern OSStatus FSStreamFlushAsync(FSStreamObjID stream_t, const KernelNotification *completion_i, MessageID *requestID_o)
  526. ;
  527.     IF GENERATINGCFM THEN
  528.         IMPORT_CFM_FUNCTION FSStreamFlushAsync
  529.     ENDIF
  530.  
  531. ;  
  532. ;
  533. ; extern OSStatus FSStreamGetEOF(FSStreamObjID stream_t, FSOffset *currentEOF_o)
  534. ;
  535.     IF GENERATINGCFM THEN
  536.         IMPORT_CFM_FUNCTION FSStreamGetEOF
  537.     ENDIF
  538.  
  539. ;
  540. ; extern OSStatus FSStreamGetEOFAsync(FSStreamObjID stream_t, const KernelNotification *completion_i, FSOffset *currentEOF_o, MessageID *requestID_o)
  541. ;
  542.     IF GENERATINGCFM THEN
  543.         IMPORT_CFM_FUNCTION FSStreamGetEOFAsync
  544.     ENDIF
  545.  
  546. ;  
  547. ;
  548. ; extern OSStatus FSStreamGetInformation(FSStreamObjID stream_t, FSObjectRef *object_o, FSProperty *fork_o, FSForkAccessConstraints *constraints_o)
  549. ;
  550.     IF GENERATINGCFM THEN
  551.         IMPORT_CFM_FUNCTION FSStreamGetInformation
  552.     ENDIF
  553.  
  554. ;
  555. ; extern OSStatus FSStreamGetInformationAsync(FSStreamObjID stream_t, const KernelNotification *completion_i, FSObjectRef *object_o, FSProperty *fork_o, FSForkAccessConstraints *constraints_o, MessageID *requestID_o)
  556. ;
  557.     IF GENERATINGCFM THEN
  558.         IMPORT_CFM_FUNCTION FSStreamGetInformationAsync
  559.     ENDIF
  560.  
  561. ;
  562. ;    Function:    FSStreamGetMark
  563. ;    Purpose:    Returns the current mark (position offset) for a stream.
  564. ;    Inputs:
  565. ;                stream_t            The stream.
  566. ;    Outputs:
  567. ;                currentMark_o        Current offset in the stream, stream_t.
  568. ;    Notes:
  569. ;                This call returns the offset from the start of the file that would be
  570. ;                equivalent to using a FSForkPositionDescriptor whose positionOffset is
  571. ;                0, and whose positionMode is kFSFromMark.  A stream's mark is set to
  572. ;                the byte following the last read or write, or via FSStreamSetMark.
  573. ;
  574. ;
  575. ; extern OSStatus FSStreamGetMark(FSStreamObjID stream_t, FSOffset *currentMark_o)
  576. ;
  577.     IF GENERATINGCFM THEN
  578.         IMPORT_CFM_FUNCTION FSStreamGetMark
  579.     ENDIF
  580.  
  581. ;
  582. ; extern OSStatus FSStreamGetMarkAsync(FSStreamObjID stream_t, const KernelNotification *completion_i, FSOffset *currentMark_o, MessageID *requestID_o)
  583. ;
  584.     IF GENERATINGCFM THEN
  585.         IMPORT_CFM_FUNCTION FSStreamGetMarkAsync
  586.     ENDIF
  587.  
  588. ;  
  589. ;
  590. ; extern OSStatus FSStreamLockRange(FSStreamObjID stream_t, const FSForkPositionDescriptor *position_i, FSSize length_i, FSRangeLockOptions options_i, FSOffset *rangeStart_o, FSSize *actualLength_o)
  591. ;
  592.     IF GENERATINGCFM THEN
  593.         IMPORT_CFM_FUNCTION FSStreamLockRange
  594.     ENDIF
  595.  
  596. ;
  597. ; extern OSStatus FSStreamLockRangeAsync(FSStreamObjID stream_t, const FSForkPositionDescriptor *position_i, FSSize length_i, FSRangeLockOptions options_i, const KernelNotification *completion_i, FSOffset *rangeStart_o, FSSize *actualLength_o, MessageID *requestID_o)
  598. ;
  599.     IF GENERATINGCFM THEN
  600.         IMPORT_CFM_FUNCTION FSStreamLockRangeAsync
  601.     ENDIF
  602.  
  603. ;  
  604. ;
  605. ; extern OSStatus FSStreamOpenWithConstraints(FSObjectRef object_t, const FSProperty *fork_i, const FSForkAccessConstraints *constraints_i, FSStreamObjID *stream_o)
  606. ;
  607.     IF GENERATINGCFM THEN
  608.         IMPORT_CFM_FUNCTION FSStreamOpenWithConstraints
  609.     ENDIF
  610.  
  611. ;
  612. ; extern OSStatus FSStreamOpenWithConstraintsAsync(FSObjectRef object_t, const FSProperty *fork_i, const FSForkAccessConstraints *constraints_i, const KernelNotification *completion_i, FSStreamObjID *stream_o, MessageID *requestID_o)
  613. ;
  614.     IF GENERATINGCFM THEN
  615.         IMPORT_CFM_FUNCTION FSStreamOpenWithConstraintsAsync
  616.     ENDIF
  617.  
  618. ;  
  619. ;
  620. ; extern OSStatus FSStreamRead(FSStreamObjID stream_t, const FSForkPositionDescriptor *position_i, FSStreamIOOptions options_i, FSBufferDescriptor *buffer_o, ByteCount *actualLength_o, FSOffset *currentMark_o)
  621. ;
  622.     IF GENERATINGCFM THEN
  623.         IMPORT_CFM_FUNCTION FSStreamRead
  624.     ENDIF
  625.  
  626. ;
  627. ; extern OSStatus FSStreamReadAsync(FSStreamObjID stream_t, const FSForkPositionDescriptor *position_i, FSStreamIOOptions options_i, const KernelNotification *completion_i, FSBufferDescriptor *buffer_o, ByteCount *actualLength_o, FSOffset *currentMark_o, MessageID *requestID_o)
  628. ;
  629.     IF GENERATINGCFM THEN
  630.         IMPORT_CFM_FUNCTION FSStreamReadAsync
  631.     ENDIF
  632.  
  633. ;  
  634. ;
  635. ; extern OSStatus FSStreamReleaseAllocation(FSStreamObjID stream_t, const FSForkPositionDescriptor *start_i, FSSize length_i, FSSize *actualLength_o)
  636. ;
  637.     IF GENERATINGCFM THEN
  638.         IMPORT_CFM_FUNCTION FSStreamReleaseAllocation
  639.     ENDIF
  640.  
  641. ;
  642. ; extern OSStatus FSStreamReleaseAllocationAsync(FSStreamObjID stream_t, const FSForkPositionDescriptor *start_i, FSSize length_i, const KernelNotification *completion_i, FSSize *actualLength_o, MessageID *requestID_o)
  643. ;
  644.     IF GENERATINGCFM THEN
  645.         IMPORT_CFM_FUNCTION FSStreamReleaseAllocationAsync
  646.     ENDIF
  647.  
  648. ;  
  649. ;
  650. ; extern OSStatus FSStreamSetEOF(FSStreamObjID stream_t, const FSForkPositionDescriptor *EOF_i, FSForkAllocationPolicy policy_i, FSOffset *currentEOF_o)
  651. ;
  652.     IF GENERATINGCFM THEN
  653.         IMPORT_CFM_FUNCTION FSStreamSetEOF
  654.     ENDIF
  655.  
  656. ;
  657. ; extern OSStatus FSStreamSetEOFAsync(FSStreamObjID stream_t, const FSForkPositionDescriptor *EOF_i, FSForkAllocationPolicy policy_i, const KernelNotification *completion_i, FSOffset *currentEOF_o, MessageID *requestID_o)
  658. ;
  659.     IF GENERATINGCFM THEN
  660.         IMPORT_CFM_FUNCTION FSStreamSetEOFAsync
  661.     ENDIF
  662.  
  663. ;
  664. ;    Function:    FSStreamSetMark
  665. ;    Purpose:    Sets the current mark (position offset) for a stream.
  666. ;    Inputs:
  667. ;                stream_t            The stream.
  668. ;                newPosition_i        The new position of the stream's mark.
  669. ;                options_i
  670. ;    Outputs:
  671. ;                originalMark_o        The stream's mark, before being changed (relative
  672. ;                                    to the start of the stream).
  673. ;                currentMark_o        The new mark, relative to the start of the stream.
  674. ;    Notes:
  675. ;                A stream's mark is usually used for sequential access to a stream,
  676. ;                or to position relative to the ending position of the last operation
  677. ;                on a stream.  This call lets you explicitly set the mark for future
  678. ;                operations that will operate relative to the current mark.
  679. ;                
  680. ;                If kFSMarkPinToEOF is set in options_i, and the new position specified
  681. ;                by newPosition_i would exceed the current end of the stream (also known
  682. ;                as End Of File or EOF), then the mark will be set to the EOF and E_NoError
  683. ;                is returned.  Otherwise, an error will returned.  The mark may never be
  684. ;                set past the end of the stream.
  685. ;
  686. ;
  687. ;
  688. ;
  689. ; extern OSStatus FSStreamSetMark(FSStreamObjID stream_t, const FSForkPositionDescriptor *newPosition_i, FSStreamSetMarkOptions options_i, FSOffset *originalMark_o, FSOffset *currentMark_o)
  690. ;
  691.     IF GENERATINGCFM THEN
  692.         IMPORT_CFM_FUNCTION FSStreamSetMark
  693.     ENDIF
  694.  
  695. ;
  696. ; extern OSStatus FSStreamSetMarkAsync(FSStreamObjID stream_t, const FSForkPositionDescriptor *newPosition_i, FSStreamSetMarkOptions options_i, const KernelNotification *completion_i, FSOffset *originalMark_o, FSOffset *currentMark_o, MessageID *requestID_o)
  697. ;
  698.     IF GENERATINGCFM THEN
  699.         IMPORT_CFM_FUNCTION FSStreamSetMarkAsync
  700.     ENDIF
  701.  
  702. ;  
  703. ;
  704. ; extern OSStatus FSStreamUnlockRange(FSStreamObjID stream_t, const FSForkPositionDescriptor *position_i, FSSize length_i, FSRangeLockOptions options_i)
  705. ;
  706.     IF GENERATINGCFM THEN
  707.         IMPORT_CFM_FUNCTION FSStreamUnlockRange
  708.     ENDIF
  709.  
  710. ;
  711. ; extern OSStatus FSStreamUnlockRangeAsync(FSStreamObjID stream_t, const FSForkPositionDescriptor *position_i, FSSize length_i, FSRangeLockOptions options_i, const KernelNotification *completion_i, MessageID *requestID_o)
  712. ;
  713.     IF GENERATINGCFM THEN
  714.         IMPORT_CFM_FUNCTION FSStreamUnlockRangeAsync
  715.     ENDIF
  716.  
  717. ;  
  718. ;
  719. ; extern OSStatus FSStreamWrite(FSStreamObjID stream_t, const FSForkPositionDescriptor *position_i, FSStreamIOOptions options_i, const FSBufferDescriptor *buffer_i, ByteCount *actualLength_o, FSOffset *currentMark_o)
  720. ;
  721.     IF GENERATINGCFM THEN
  722.         IMPORT_CFM_FUNCTION FSStreamWrite
  723.     ENDIF
  724.  
  725. ;
  726. ; extern OSStatus FSStreamWriteAsync(FSStreamObjID stream_t, const FSForkPositionDescriptor *position_i, FSStreamIOOptions options_i, const FSBufferDescriptor *buffer_i, const KernelNotification *completion_i, ByteCount *actualLength_o, FSOffset *currentMark_o, MessageID *requestID_o)
  727. ;
  728.     IF GENERATINGCFM THEN
  729.         IMPORT_CFM_FUNCTION FSStreamWriteAsync
  730.     ENDIF
  731.  
  732. ;
  733. ;============================================================================
  734. ;    Memory-mapped Access Method(Backing Store Requests)
  735. ;============================================================================
  736. ;
  737. ;
  738. ;    Function:    FSMappedFileClose
  739. ;    Purpose:    Closes an access path to a file used for backing store.
  740. ;    Inputs:
  741. ;                backingStore_t        The backing store object.
  742. ;    Outputs:
  743. ;    Notes:
  744. ;                Basically the same as FSStreamClose, but for a backing store.
  745. ;                
  746. ;                All data written to this backing store (by writing to pages backed by
  747. ;                this store) will be flushed (written) by the File Manager.
  748. ;
  749. ;
  750. ; extern OSStatus FSMappedFileClose(FSBackingStoreObjID backingStore_t)
  751. ;
  752.     IF GENERATINGCFM THEN
  753.         IMPORT_CFM_FUNCTION FSMappedFileClose
  754.     ENDIF
  755.  
  756. ;
  757. ; extern OSStatus FSMappedFileCloseAsync(FSBackingStoreObjID backingStore_t, const KernelNotification *completion_i, MessageID *requestID_o)
  758. ;
  759.     IF GENERATINGCFM THEN
  760.         IMPORT_CFM_FUNCTION FSMappedFileCloseAsync
  761.     ENDIF
  762.  
  763. ;
  764. ;    Function:    FSMappedFileGetEOF
  765. ;    Purpose:    Return the EOF (length) of the fork being accessed by the given backing store.
  766. ;    Inputs:
  767. ;                backingStore_t        The backing store used to access the fork.
  768. ;    Outputs:
  769. ;                currentEOF_o        The size, in bytes, of the fork.
  770. ;    Notes:
  771. ;                Since access to a fork via a backing store (i.e. memory mapped file access) is
  772. ;                accomplished by directly accessing memory pages, the virtual memory system must
  773. ;                read and write entire pages.  If the last page is modified, the entire page is
  774. ;                written, resulting in the fork size being rounded up to a multiple of a page size.
  775. ;                Similarly for access to pages beyond the fork's EOF.
  776. ;                
  777. ;                This call returns the current EOF (length) of the underlying fork.  This may be
  778. ;                set implicitly by writing to backed pages, or by using the FSBackingStoreSetEOF
  779. ;                call.  It may also be changed by streams opened to the same fork.
  780. ;
  781. ;
  782. ; extern OSStatus FSMappedFileGetEOF(FSBackingStoreObjID backingStore_t, FSOffset *currentEOF_o)
  783. ;
  784.     IF GENERATINGCFM THEN
  785.         IMPORT_CFM_FUNCTION FSMappedFileGetEOF
  786.     ENDIF
  787.  
  788. ;
  789. ; extern OSStatus FSMappedFileGetEOFAsync(FSBackingStoreObjID backingStore_t, const KernelNotification *completion_i, FSOffset *currentEOF_o, MessageID *requestID_o)
  790. ;
  791.     IF GENERATINGCFM THEN
  792.         IMPORT_CFM_FUNCTION FSMappedFileGetEOFAsync
  793.     ENDIF
  794.  
  795. ;  
  796. ;
  797. ; extern OSStatus FSMappedFileGetInformation(FSBackingStoreObjID backingStore_t, FSObjectRef *object_o, FSProperty *fork_o, FSForkAccessConstraints *constraints_o)
  798. ;
  799.     IF GENERATINGCFM THEN
  800.         IMPORT_CFM_FUNCTION FSMappedFileGetInformation
  801.     ENDIF
  802.  
  803. ;
  804. ; extern OSStatus FSMappedFileGetInformationAsync(FSBackingStoreObjID backingStore_t, const KernelNotification *completion_i, FSObjectRef *object_o, FSProperty *fork_o, FSForkAccessConstraints *constraints_o, MessageID *requestID_o)
  805. ;
  806.     IF GENERATINGCFM THEN
  807.         IMPORT_CFM_FUNCTION FSMappedFileGetInformationAsync
  808.     ENDIF
  809.  
  810. ;
  811. ;    Function:    FSMappedFileSetEOF
  812. ;    Purpose:    Sets the EOF (length) of the fork being accessed by the given backing store.
  813. ;    Inputs:
  814. ;                backingStore_t        The backing store used to access the fork.
  815. ;                EOF_i                The new length (EOF) of the fork.
  816. ;                policy_i            Controls how space should be allocated (if the new EOF
  817. ;                                    is larger than the current EOF).
  818. ;    Outputs:
  819. ;                currentEOF_o        The new size, in bytes, of the fork.
  820. ;    Notes:
  821. ;                Since access to a fork via a backing store (i.e. memory mapped file access) is
  822. ;                accomplished by directly accessing memory pages, the virtual memory system must
  823. ;                read and write entire pages.  If the last page is modified, the entire page is
  824. ;                written, resulting in the fork size being rounded up to a multiple of a page size.
  825. ;                Similarly for access to pages beyond the fork's EOF.
  826. ;                
  827. ;                This call allows the EOF to be explicitly set for a fork being accessed via a
  828. ;                backing store.  Any data beyond the EOF will not actually be written to the fork.
  829. ;                The File Manager has no way to detect whether access to pages occurs beyond the
  830. ;                EOF; it is a programming error to access bytes beyond the EOF via a backing store.
  831. ;                
  832. ;                This call would typically be used when a fork has been memory mapped to enable
  833. ;                convenient access to a file's data structures as if it were completely in memory.
  834. ;                You would make all changes to the data structures, then use this call to indicate
  835. ;                the number of bytes that are valid and should be written to the fork.
  836. ;
  837. ;
  838. ; extern OSStatus FSMappedFileSetEOF(FSBackingStoreObjID backingStore_t, const FSForkPositionDescriptor *EOF_i, FSForkAllocationPolicy policy_i, FSOffset *currentEOF_o)
  839. ;
  840.     IF GENERATINGCFM THEN
  841.         IMPORT_CFM_FUNCTION FSMappedFileSetEOF
  842.     ENDIF
  843.  
  844. ;
  845. ; extern OSStatus FSMappedFileSetEOFAsync(FSBackingStoreObjID backingStore_t, const FSForkPositionDescriptor *EOF_i, FSForkAllocationPolicy policy_i, const KernelNotification *completion_i, FSOffset *currentEOF_o, MessageID *requestID_o)
  846. ;
  847.     IF GENERATINGCFM THEN
  848.         IMPORT_CFM_FUNCTION FSMappedFileSetEOFAsync
  849.     ENDIF
  850.  
  851. ;  
  852. ;
  853. ; extern OSStatus FSMappedFileOpenWithConstraints(FSObjectRef object_t, const FSProperty *fork_i, const FSForkAccessConstraints *constraints_i, FSBackingStoreObjID *backingStore_o)
  854. ;
  855.     IF GENERATINGCFM THEN
  856.         IMPORT_CFM_FUNCTION FSMappedFileOpenWithConstraints
  857.     ENDIF
  858.  
  859. ;
  860. ; extern OSStatus FSMappedFileOpenWithConstraintsAsync(FSObjectRef object_t, const FSProperty *fork_i, const FSForkAccessConstraints *constraints_i, const KernelNotification *completion_i, FSBackingStoreObjID *backingStore_o, MessageID *requestID_o)
  861. ;
  862.     IF GENERATINGCFM THEN
  863.         IMPORT_CFM_FUNCTION FSMappedFileOpenWithConstraintsAsync
  864.     ENDIF
  865.  
  866. ;
  867. ;****************************************************************************
  868. ;    NAVIGATION & ENUMERATION
  869. ;****************************************************************************
  870. ;
  871. ;
  872. ;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  873. ;    Object Iteration
  874. ;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  875. ;
  876. ;
  877. ; extern OSStatus FSObjectIterate(FSObjectIteratorObjID iterator_t, ItemCount objectCount_i, ItemCount propertyCount_i, const FSPropertyDescriptor properties_i[2147483647], ItemCount *actualObjectCount_o, FSBufferDescriptor *propertiesBuffer_o, FSBufferDescriptor *statusBuffer_o)
  878. ;
  879.     IF GENERATINGCFM THEN
  880.         IMPORT_CFM_FUNCTION FSObjectIterate
  881.     ENDIF
  882.  
  883. ;
  884. ; extern OSStatus FSObjectIterateAsync(FSObjectIteratorObjID iterator_t, ItemCount objectCount_i, ItemCount propertyCount_i, const FSPropertyDescriptor properties_i[2147483647], const KernelNotification *completion_i, ItemCount *actualObjectCount_o, FSBufferDescriptor *propertiesBuffer_o, FSBufferDescriptor *statusBuffer_o, MessageID *requestID_o)
  885. ;
  886.     IF GENERATINGCFM THEN
  887.         IMPORT_CFM_FUNCTION FSObjectIterateAsync
  888.     ENDIF
  889.  
  890. ;
  891. ;    Function:    FSObjectIteratorChangeCurrentScope
  892. ;    Purpose:    Move an object iterator into or out of a container.
  893. ;    Inputs:
  894. ;                iterator_t        The object iterator.
  895. ;                movement_i        The direction to move: into or out of a container.
  896. ;    Outputs:
  897. ;    Notes:
  898. ;                If movement_i is kFSObjectEnter, then the iterator must be positioned on
  899. ;                an object that is capable of containing other objects; it does not need to
  900. ;                actually contain any objects at that time.  That object will become the new
  901. ;                current scope of the iterator and it will be in Start Of Iteration state
  902. ;                (meaning that all objects in the current scope have yet to be returned).
  903. ;                The iterator will not be positioned on any object.
  904. ;                
  905. ;                If movement_i is kFSObjectExit,  then the current scope will become the object
  906. ;                that contains the current scope; the iterator's new position will be the object
  907. ;                that was the current scope.  If the current scope and the outermost scope were
  908. ;                the same, then the outermost scope will also change to the new current scope and
  909. ;                E_ExitIteratorScope is returned (so that you realize you will be iterating outside
  910. ;                of the scope that you used to create the iterator; the iterator remains usable).
  911. ;                
  912. ;                Object iterators keep track of all of the objects between the outermost scope and
  913. ;                the current scope (this is known as the "scope stack").  If any object in the scope
  914. ;                stack is moved, the iterator is invalidated and will return the error
  915. ;                E_IteratorScopeException until it has been explicitly fixed (by FSObjectIteratorRecreate)
  916. ;                or disposed.  This call adds or removes objects from the scope stack.
  917. ;
  918. ;
  919. ; extern OSStatus FSObjectIteratorChangeCurrentScope(FSObjectIteratorObjID iterator_t, FSObjectIteratorMovement movement_i)
  920. ;
  921.     IF GENERATINGCFM THEN
  922.         IMPORT_CFM_FUNCTION FSObjectIteratorChangeCurrentScope
  923.     ENDIF
  924.  
  925. ;
  926. ; extern OSStatus FSObjectIteratorChangeCurrentScopeAsync(FSObjectIteratorObjID iterator_t, FSObjectIteratorMovement movement_i, const KernelNotification *completion_i, MessageID *requestID_o)
  927. ;
  928.     IF GENERATINGCFM THEN
  929.         IMPORT_CFM_FUNCTION FSObjectIteratorChangeCurrentScopeAsync
  930.     ENDIF
  931.  
  932. ;
  933. ; extern OSStatus FSObjectIteratorClone(FSObjectIteratorObjID iterator_t, FSObjectIteratorObjID *clone_o)
  934. ;
  935.     IF GENERATINGCFM THEN
  936.         IMPORT_CFM_FUNCTION FSObjectIteratorClone
  937.     ENDIF
  938.  
  939. ;
  940. ; extern OSStatus FSObjectIteratorCloneAsync(FSObjectIteratorObjID iterator_t, const KernelNotification *completion_i, FSObjectIteratorObjID *clone_o, MessageID *requestID_o)
  941. ;
  942.     IF GENERATINGCFM THEN
  943.         IMPORT_CFM_FUNCTION FSObjectIteratorCloneAsync
  944.     ENDIF
  945.  
  946. ;
  947. ;    Function:    FSObjectIteratorCreate
  948. ;    Purpose:    Create an iterator for iterating over objects.
  949. ;    Inputs:
  950. ;                outermostScope_t        The initial outermost scope and current scope.
  951. ;                options_i                Controls whether the iterator will traverse objects in
  952. ;                                        a single container or all embedded (nested) containers.
  953. ;                                        Also controls which kinds of objects will be returned.
  954. ;    Outputs:
  955. ;                iterator_o                The object iterator.
  956. ;    Notes:
  957. ;                The outermost scope and current scope of the iterator are set to outermostScope_t.
  958. ;                The iterator is not positioned on any object, though it is inside outermostScope_t.
  959. ;                OutermostScope_t must be an object capable of containing other objects (such as the
  960. ;                Universe, a volume set, a volume, or a folder).  The iterator is put into "Start Of
  961. ;                Iteration" state, meaning that all objects in the current scope have yet to be
  962. ;                returned.
  963. ;                
  964. ;                The File Manager allocates resources and maintains state for every iterator.  When
  965. ;                you have finished using an iterator, you should call FSObjectIteratorDispose to dispose
  966. ;                of it.
  967. ;
  968. ;
  969. ; extern OSStatus FSObjectIteratorCreate(FSObjectRef outermostScope_t, FSObjectIteratorCreationOptions options_i, FSObjectIteratorObjID *iterator_o)
  970. ;
  971.     IF GENERATINGCFM THEN
  972.         IMPORT_CFM_FUNCTION FSObjectIteratorCreate
  973.     ENDIF
  974.  
  975. ;
  976. ; extern OSStatus FSObjectIteratorCreateAsync(FSObjectRef outermostScope_t, FSObjectIteratorCreationOptions options_i, const KernelNotification *completion_i, FSObjectIteratorObjID *iterator_o, MessageID *requestID_o)
  977. ;
  978.     IF GENERATINGCFM THEN
  979.         IMPORT_CFM_FUNCTION FSObjectIteratorCreateAsync
  980.     ENDIF
  981.  
  982. ;
  983. ;    Function:    FSObjectIteratorDispose
  984. ;    Purpose:    Dispose of an object iterator.
  985. ;    Inputs:
  986. ;                iterator_t        The object iterator.
  987. ;    Outputs:
  988. ;    Notes:
  989. ;                The File Manager will dispose of the iterator and release any resources
  990. ;                allocated to the iterator.  Further attempts to use the iterator will result
  991. ;                in an error.
  992. ;
  993. ;
  994. ;
  995. ;
  996. ; extern OSStatus FSObjectIteratorDispose(FSObjectIteratorObjID iterator_t)
  997. ;
  998.     IF GENERATINGCFM THEN
  999.         IMPORT_CFM_FUNCTION FSObjectIteratorDispose
  1000.     ENDIF
  1001.  
  1002. ;
  1003. ; extern OSStatus FSObjectIteratorDisposeAsync(FSObjectIteratorObjID iterator_t, const KernelNotification *completion_i, MessageID *requestID_o)
  1004. ;
  1005.     IF GENERATINGCFM THEN
  1006.         IMPORT_CFM_FUNCTION FSObjectIteratorDisposeAsync
  1007.     ENDIF
  1008.  
  1009. ;
  1010. ; extern OSStatus FSObjectIteratorGetInformation(FSObjectIteratorObjID iterator_t, FSObjectRef *outermostScope_o, FSObjectRef *currentScope_o, FSObjectIteratorCreationOptions *options_o, FSObjectIteratorState *state_o)
  1011. ;
  1012.     IF GENERATINGCFM THEN
  1013.         IMPORT_CFM_FUNCTION FSObjectIteratorGetInformation
  1014.     ENDIF
  1015.  
  1016. ;
  1017. ; extern OSStatus FSObjectIteratorGetInformationAsync(FSObjectIteratorObjID iterator_t, const KernelNotification *completion_i, FSObjectRef *outermostScope_o, FSObjectRef *currentScope_o, FSObjectIteratorCreationOptions *options_o, FSObjectIteratorState *state_o, MessageID *requestID_o)
  1018. ;
  1019.     IF GENERATINGCFM THEN
  1020.         IMPORT_CFM_FUNCTION FSObjectIteratorGetInformationAsync
  1021.     ENDIF
  1022.  
  1023. ;
  1024. ; extern OSStatus FSObjectIteratorRecreate(FSObjectIteratorObjID iterator_t, FSObjectRef outermostScope_i, Boolean preserveCurrentOptions_i, FSObjectIteratorCreationOptions options_i)
  1025. ;
  1026.     IF GENERATINGCFM THEN
  1027.         IMPORT_CFM_FUNCTION FSObjectIteratorRecreate
  1028.     ENDIF
  1029.  
  1030. ;
  1031. ; extern OSStatus FSObjectIteratorRecreateAsync(FSObjectIteratorObjID iterator_t, FSObjectRef outermostScope_i, Boolean preserveCurrentOptions_i, FSObjectIteratorCreationOptions options_i, const KernelNotification *completion_i, MessageID *requestID_o)
  1032. ;
  1033.     IF GENERATINGCFM THEN
  1034.         IMPORT_CFM_FUNCTION FSObjectIteratorRecreateAsync
  1035.     ENDIF
  1036.  
  1037. ;
  1038. ;    Function:    FSObjectIteratorRestart
  1039. ;    Purpose:    Place an object iterator in the Start Of Iterator state, in its current scope.
  1040. ;    Inputs:
  1041. ;                iterator_t        The object iterator.
  1042. ;    Outputs:
  1043. ;    Notes:
  1044. ;                The iterator is not positioned on any object.  The iterator is put into "Start Of
  1045. ;                Iteration" state, meaning that all objects in the current scope have yet to be
  1046. ;                returned.
  1047. ;                
  1048. ;                You would use this call to completely restart iteration within the current scope,
  1049. ;                ignoring any state about objects previously returned in the current scope.  The
  1050. ;                outermost scope is not affected.  State information about which objects have been
  1051. ;                returned from scopes outside the current scope is unchanged.
  1052. ;
  1053. ;
  1054. ; extern OSStatus FSObjectIteratorRestart(FSObjectIteratorObjID iterator_t)
  1055. ;
  1056.     IF GENERATINGCFM THEN
  1057.         IMPORT_CFM_FUNCTION FSObjectIteratorRestart
  1058.     ENDIF
  1059.  
  1060. ;
  1061. ; extern OSStatus FSObjectIteratorRestartAsync(FSObjectIteratorObjID iterator_t, const KernelNotification *completion_i, MessageID *requestID_o)
  1062. ;
  1063.     IF GENERATINGCFM THEN
  1064.         IMPORT_CFM_FUNCTION FSObjectIteratorRestartAsync
  1065.     ENDIF
  1066.  
  1067. ;
  1068. ;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  1069. ;    Object Resolution
  1070. ;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  1071. ;
  1072. ;
  1073. ;    Function:    FSObjectExchange
  1074. ;    Purpose:    Exchange the properties of two objects.  Typically used for "safe
  1075. ;                saving", while maintaining an object's persistent reference.
  1076. ;    Inputs:
  1077. ;                object1_i        One object.
  1078. ;                object2_i        The object to exchange it with.
  1079. ;    Outputs:
  1080. ;    Notes:
  1081. ;                This call is used to allow a "safe save" that preserves an object's
  1082. ;                persistent reference.  For example, you might want to save an updated
  1083. ;                set of properties to an object so that any errors while saving result
  1084. ;                in the object being unchanged; but, you also want the object's persistent
  1085. ;                reference to remain unchanged (so that things like aliases still work).
  1086. ;                
  1087. ;                What you would do is create a second object somewhere (in a temporary
  1088. ;                folder, for example).  Write out all of the properties, both unchanged
  1089. ;                and changed, to the second object.  When done saving, you would call
  1090. ;                FSObjectExchange with both objects; the contents of the two objects get
  1091. ;                swapped in such a way that the original object has the new properties,
  1092. ;                but retains its old persistent reference.
  1093. ;
  1094. ;
  1095. ;
  1096. ;
  1097. ; extern OSStatus FSObjectExchange(FSObjectRef object1_i, FSObjectRef object2_i)
  1098. ;
  1099.     IF GENERATINGCFM THEN
  1100.         IMPORT_CFM_FUNCTION FSObjectExchange
  1101.     ENDIF
  1102.  
  1103. ;
  1104. ; extern OSStatus FSObjectExchangeAsync(FSObjectRef object1_i, FSObjectRef object2_i, const KernelNotification *completion_i, MessageID *requestID_o)
  1105. ;
  1106.     IF GENERATINGCFM THEN
  1107.         IMPORT_CFM_FUNCTION FSObjectExchangeAsync
  1108.     ENDIF
  1109.  
  1110. ;
  1111. ;    Function:    FSObjectRefGetFSSpec
  1112. ;    Purpose:    Return an FSSpec for an object (suitable for use with the Files API).
  1113. ;    Inputs:
  1114. ;                object_t            The object.
  1115. ;    Outputs:
  1116. ;                fSSpec_o            An FSSpec that specifies the same object as object_t,
  1117. ;                                    suitable for use with the Files API.
  1118. ;    Notes:
  1119. ;                This call is intended to be used by code that is required to use both the
  1120. ;                Files API and the FileManager API (or has clients that use both APIs).
  1121. ;                For example, a piece of code may already exist with an API that uses FSSpecs,
  1122. ;                but has been converted internally to use the FSObjectRefs; it would use this
  1123. ;                call to produce an FSSpec as an output for the pre-existing API.
  1124. ;                
  1125. ;                It would be best to provide an API that allows its clients to use FSObjectRefs.
  1126. ;
  1127. ;
  1128. ; extern OSStatus FSObjectRefGetFSSpec(FSObjectRef object_t, FSSpec *fSSpec_o)
  1129. ;
  1130.     IF GENERATINGCFM THEN
  1131.         IMPORT_CFM_FUNCTION FSObjectRefGetFSSpec
  1132.     ENDIF
  1133.  
  1134. ;
  1135. ; extern OSStatus FSObjectRefGetFSSpecAsync(FSObjectRef object_t, const KernelNotification *completion_i, FSSpec *fSSpec_o, MessageID *requestID_o)
  1136. ;
  1137.     IF GENERATINGCFM THEN
  1138.         IMPORT_CFM_FUNCTION FSObjectRefGetFSSpecAsync
  1139.     ENDIF
  1140.  
  1141. ;
  1142. ; extern OSStatus FSObjectLocate(FSObjectRef container_t, ItemCount elementCount_i, const FSObjectPathwayElement pathway_i[2147483647], const FSBufferDescriptor *pathwayPropertiesBuffer_i, FSObjectRef *object_o)
  1143. ;
  1144.     IF GENERATINGCFM THEN
  1145.         IMPORT_CFM_FUNCTION FSObjectLocate
  1146.     ENDIF
  1147.  
  1148. ;
  1149. ; extern OSStatus FSObjectLocateAsync(FSObjectRef container_t, ItemCount elementCount_i, const FSObjectPathwayElement pathway_i[2147483647], const FSBufferDescriptor *pathwayPropertiesBuffer_i, const KernelNotification *completion_i, FSObjectRef *object_o, MessageID *requestID_o)
  1150. ;
  1151.     IF GENERATINGCFM THEN
  1152.         IMPORT_CFM_FUNCTION FSObjectLocateAsync
  1153.     ENDIF
  1154.  
  1155. ;
  1156. ; extern OSStatus FSObjectPersistentReferenceResolve(FSVolumeObjID volume_t, const FSObjectPersistentReference *persistentReference_i, FSObjectRef *object_o)
  1157. ;
  1158.     IF GENERATINGCFM THEN
  1159.         IMPORT_CFM_FUNCTION FSObjectPersistentReferenceResolve
  1160.     ENDIF
  1161.  
  1162. ;
  1163. ; extern OSStatus FSObjectPersistentReferenceResolveAsync(FSVolumeObjID volume_t, const FSObjectPersistentReference *persistentReference_i, const KernelNotification *completion_i, FSObjectRef *object_o, MessageID *requestID_o)
  1164. ;
  1165.     IF GENERATINGCFM THEN
  1166.         IMPORT_CFM_FUNCTION FSObjectPersistentReferenceResolveAsync
  1167.     ENDIF
  1168.  
  1169. ;  
  1170. ;
  1171. ; extern OSStatus FSObjectRefResolve(FSObjectRef object_t, FSVolumeObjID *objectsVolume_o, FSVolumeSetObjID *objectsVolumeSet_o)
  1172. ;
  1173.     IF GENERATINGCFM THEN
  1174.         IMPORT_CFM_FUNCTION FSObjectRefResolve
  1175.     ENDIF
  1176.  
  1177. ;
  1178. ; extern OSStatus FSObjectRefResolveAsync(FSObjectRef object_t, const KernelNotification *completion_i, FSVolumeObjID *objectsVolume_o, FSVolumeSetObjID *objectsVolumeSet_o, MessageID *requestID_o)
  1179. ;
  1180.     IF GENERATINGCFM THEN
  1181.         IMPORT_CFM_FUNCTION FSObjectRefResolveAsync
  1182.     ENDIF
  1183.  
  1184. ;
  1185. ;    Function:    FSSpecGetFSObjectRef
  1186. ;    Purpose:    Return an FSObjectRef for an object specified via an FSSpec.
  1187. ;    Inputs:
  1188. ;                theFSSpec_t            An FSSpec for the object.
  1189. ;    Outputs:
  1190. ;                theObject_o            An FSObjectRef for the object.
  1191. ;    Notes:
  1192. ;                This call is intended to be used by code that is required to use both the
  1193. ;                Files API and the FileManager API (or has clients that use both APIs).
  1194. ;                For example, a piece of code may already exist with an API that uses FSSpecs,
  1195. ;                but has been converted internally to use the FSObjectRefs; it would use this
  1196. ;                call to take an input FSSpec and convert it to an FSObjectRef to use internally;
  1197. ;                the FSObjectRef would then be disposed before completing the call.
  1198. ;                
  1199. ;                It would be best to provide an API that allows its clients to use FSObjectRefs.
  1200. ;
  1201. ;
  1202. ; extern OSStatus FSSpecGetFSObjectRef(const FSSpec *theFSSpec_t, FSObjectRef *theObject_o)
  1203. ;
  1204.     IF GENERATINGCFM THEN
  1205.         IMPORT_CFM_FUNCTION FSSpecGetFSObjectRef
  1206.     ENDIF
  1207.  
  1208. ;  
  1209. ;
  1210. ; extern OSStatus FSUniverseResolve(FSObjectRef *theUniverse_o)
  1211. ;
  1212.     IF GENERATINGCFM THEN
  1213.         IMPORT_CFM_FUNCTION FSUniverseResolve
  1214.     ENDIF
  1215.  
  1216. ;
  1217. ; extern OSStatus FSUniverseResolveAsync(FSObjectRef *theUniverse_o, const KernelNotification *theCompletion_i, MessageID *theRequestID_o)
  1218. ;
  1219.     IF GENERATINGCFM THEN
  1220.         IMPORT_CFM_FUNCTION FSUniverseResolveAsync
  1221.     ENDIF
  1222.  
  1223. ; >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> F a c i l i t i e s <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
  1224. ;
  1225. ;============================================================================
  1226. ;    Cache Flush Routines
  1227. ;============================================================================
  1228. ;
  1229. ;
  1230. ;    Function:    FSObjectFlush
  1231. ;    Purpose:    Flushes any data cached by the File Manager for the given object.
  1232. ;    Inputs:
  1233. ;                object_t        The object to be flushed.
  1234. ;    Outputs:
  1235. ;    Notes:
  1236. ;                If object_t is a file, then any data written to that file (via a stream or backing store,
  1237. ;                regardless of the process that opened the stream or backing store) will be written by the
  1238. ;                File Manager to any underlying device.  If object_t is a volume, then any data written to
  1239. ;                any file on that volume will be flushed.
  1240. ;                
  1241. ;                Any change to properties of object_t will be flushed (regardless of the object's type).
  1242. ;                
  1243. ;                Data about the object (or contained in the object) may still reside in the File Manager's
  1244. ;                caches, but any changes will have been written out by the File Manager.  Note that the
  1245. ;                underlying device's driver, or the device itself, may cache some data, so the File Manager
  1246. ;                cannot guarantee that all data has actually been written to the underlying media.
  1247. ;
  1248. ;
  1249. ;
  1250. ;
  1251. ;
  1252. ; extern OSStatus FSObjectFlush(FSObjectRef object_t)
  1253. ;
  1254.     IF GENERATINGCFM THEN
  1255.         IMPORT_CFM_FUNCTION FSObjectFlush
  1256.     ENDIF
  1257.  
  1258. ;
  1259. ; extern OSStatus FSObjectFlushAsync(FSObjectRef object_t, const KernelNotification *completion_i, MessageID *requestID_o)
  1260. ;
  1261.     IF GENERATINGCFM THEN
  1262.         IMPORT_CFM_FUNCTION FSObjectFlushAsync
  1263.     ENDIF
  1264.  
  1265. ;
  1266. ;============================================================================
  1267. ;    Request Cancellation Routines
  1268. ;============================================================================
  1269. ;
  1270. ;  
  1271. ;
  1272. ; extern OSStatus FSRequestCancel(MessageID theRequestID_i)
  1273. ;
  1274.     IF GENERATINGCFM THEN
  1275.         IMPORT_CFM_FUNCTION FSRequestCancel
  1276.     ENDIF
  1277.  
  1278. ;
  1279. ;============================================================================
  1280. ;    Object Property Sizes
  1281. ;============================================================================
  1282. ;
  1283. ;
  1284. ; extern OSStatus FSObjectGetForkPropertyPhysicalSizes(FSObjectRef object_t, ItemCount propertyCount_i, const FSPropertyDescriptor properties_i[2147483647], FSBufferDescriptor *propertiesBuffer_o, FSBufferDescriptor *statusBuffer_o)
  1285. ;
  1286.     IF GENERATINGCFM THEN
  1287.         IMPORT_CFM_FUNCTION FSObjectGetForkPropertyPhysicalSizes
  1288.     ENDIF
  1289.  
  1290. ;
  1291. ; extern OSStatus FSObjectGetPropertySizes(FSObjectRef object_t, ItemCount propertyCount_i, const FSPropertyDescriptor properties_i[2147483647], FSBufferDescriptor *propertiesBuffer_o, FSBufferDescriptor *statusBuffer_o)
  1292. ;
  1293.     IF GENERATINGCFM THEN
  1294.         IMPORT_CFM_FUNCTION FSObjectGetPropertySizes
  1295.     ENDIF
  1296.  
  1297.     ENDIF
  1298.     ENDIF
  1299.     ENDIF ; __FILEMANAGERSPI__ 
  1300.  
  1301.